package com.demo;

import java.io.IOException;
import java.io.StringReader;

import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
/*
 *mvn exec:java -Dexec.mainClass="com.demo.Test"
 */
public class Test {
	public static void main(String[] args) throws IOException {
		String text = "18岁那年，有个自称算命先生看了我的手相后说";
		StringReader sr = new StringReader(text);
		IKSegmenter ik = new IKSegmenter(sr, true);
		Lexeme lex = null;
		while ((lex = ik.next()) != null) {
			System.out.print(lex.getLexemeText() + "|");
		}
	}
}
/*
 * 先来看一个复杂的分词用例“中华人民共和国”，这个词在分词过程中会产生多个完整词和前缀：

    中： 前缀[中]
    华： 前缀[中华，华]；完整词[中华]
    人： 前缀[中华人，人]；完整词[中华，华人]
    民： 前缀[中华人民， 人民]；完整词[中华，华人，中华人民，人民]
    共： 前缀[中华人民共，人民共，共]；完整词[中华，华人，中华人民，人民]
    和： 前缀[中华人民共和，人民共和，共和]；完整词[中华，华人，中华人民，人民，共和]
    国： 前缀[]；完整词[中华，华人，中华人民，人民，中华人民共和国，人民共和国，共和国]

结论：一段字符串既可以是前缀又可以是完整词；任何一个字符都可能是新的前缀。

CJKSegmenter正是根据这个“结论”来的：

    维护了LinkedList tmpHits保存每个可能的前缀，使用LinkedList也说明了这里每个元素有随时被干掉的风险。
    读入新字符，对tmpHits每个元素加上当前字符判断。是完整词输出到AnalyzeContext，是前缀继续下一轮，都不是移除。
    判断当前字符是否是前缀，如果是加入tmpHits。
    tmpHits不为空，锁定AnalyzeContext；否则，解锁。
    重复步骤2。

 */